package shoppingmall.reception.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import shoppingmall.reception.dto.CartUpdateVO;
import shoppingmall.reception.dto.Result;
import shoppingmall.reception.dto.UserCartVO;
import shoppingmall.reception.pojo.UserCart;
import shoppingmall.reception.service.CartService;

import java.util.List;


/**
 * 前台 用户购物车相关controller层
 */
@Slf4j
@RestController
public class CartController {

    @Autowired
    private CartService cartService;  //service层实例

    /**
     * 添加一条购物车数据
     */
    @PostMapping("/reception/user/cart")
    public Result saveUserCart (@RequestBody UserCart userCart) {
        //输出日志
        log.info("会员添加一条购物车数据,会员id={}",userCart.getCartUserId());
        //调用service层方法
        boolean isSave = cartService.saveUserCart(userCart);
        if(!isSave){
            return Result.error("用户购物车数据添加失败!");
        }
        return Result.success("用户购物车数据添加成功!");
    }

    /**
     * 查询某用户的所有购物车数据
     */
    @GetMapping("/reception/user/cart")
    public Result getUserCartList (@RequestParam int userId) {
        //输出日志
        log.info("查询用户的购物车数据,用户id={}",userId);
        //调用service层方法
        List<UserCartVO> userCartList = cartService.getUserCartList(userId);
        //对返回的结果判断
        if(userCartList.size() == 0) {
            return Result.error("未查询到用户的购物车列表数据!");
        }
        return Result.success(userCartList);
    }

    /**
     * 删除(某用户)购物车数据(支持单条、多条删除)
     */
    @DeleteMapping("/reception/user/cart/batch")
    public Result deleteUserCart (@RequestBody List<Integer> cartIds) {
        //输出日志
        log.info("批量删除用户的购物车数据,cartIds={}",cartIds);
        //调用服务层方法
        boolean isDel = cartService.deleteUserCartBatch(cartIds);
        if(!isDel) {
            return Result.error("用户购物车数据删除失败!");
        }
        return Result.success("用户购物车数据删除成功!");
    }

    /**
     * 修改某条购物车数据(对应用户id下)
     */
    @PutMapping("/reception/user/cart")
    public Result updateUserCart (@RequestBody UserCart userCart) {
        //输出日志
        log.info("更新用户的一条购物车数据,id={}",userCart.getId());
        //调用服务层方法
        boolean isUpdate = cartService.updateUserCart(userCart);
        //判断结果
        if(!isUpdate){
            return Result.error("用户购物车数据修改失败!");
        }
        return Result.success("用户购物车数据修改成功!");
    }

    /**
     * 修改用户购物车数据的选中状态(支持单条，多条批量修改)
     */
    @PutMapping("/reception/user/cart/batch")
    public Result updateUserCartSelectedBatch (@RequestBody CartUpdateVO cartUpdateVO) {
        //输出日志
        log.info("用户购物车数据批量修改选中状态cartIds={}",cartUpdateVO.getCartIds());
        //调用服务层方法
        boolean isUpdate = cartService.updateUserCartSelectedBatch(cartUpdateVO.getCartIds(), cartUpdateVO.getCartState());
        //结果判断
        if(!isUpdate){
            return Result.error("购物车状态批量修改失败!");
        }
        return Result.success("购物车状态批量修改成功!");
    }
}
